package com.csi.controller.user;

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson2.JSON;
import com.csi.domain.History;
import com.csi.pojo.Result;
import com.csi.service.HistoryService;
import com.csi.service.UserService;
import com.csi.service.impl.HistoryServiceImpl;
import com.csi.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/user/collectMoneyController")
public class CollectMoneyController extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out = resp.getWriter();

        // 获取请求参数
        String userNumber = req.getParameter("userNumber");
        String targetUserNumber = req.getParameter("targetUserNumber");
        double amount = Double.parseDouble(req.getParameter("amount")); // 收款金额

        // 参数校验
        if (StringUtils.isEmpty(userNumber)) {
            Result result = new Result<>();
            result.setCode(400);
            result.setMsg("请求参数不能为空");
            out.print(JSON.toJSONString(result));
            out.flush();
            out.close();
            return;
        }

        UserService userService = new UserServiceImpl();
        HistoryService historyService = new HistoryServiceImpl();

        try {
            // 查找支付密码，验证是否为空
            String payPassword = userService.queryPayPassword(userNumber);
            if (payPassword == null) {
                Result result = new Result<>();
                result.setCode(7001);
                result.setMsg("未设置支付密码");
                out.print(JSON.toJSONString(result));
                return;
            }

            // 钱包收款
            userService.collectMoney(userNumber, targetUserNumber, amount);

            // 收款成功生历史记录
            History history = new History();
            history.setUserNumber(userNumber);
            history.setOperationType("收钱");
            history.setPayIn(userNumber);
            history.setAmount(amount);
            historyService.add(history);

            Result result = new Result<>();
            result.setCode(200);
            result.setMsg("收款成功");
            out.print(JSON.toJSONString(result));
        } catch (Exception e) {
            Result result = new Result<>();
            result.setCode(500);
            result.setMsg("服务器内部错误");
            out.print(JSON.toJSONString(result));
            e.printStackTrace();
        } finally {
            out.flush();
            out.close();
        }
	}
}
